import QtQuick 1.0
import "Components/"
import "Util/Util.js" as Util
import "Util/SettingManager.js" as SettingManager
import "WebAccess/TwitterAPI.js" as TwitterAPI
import "Util/"

Rectangle {
    id: _rootContainer
    width: 360
    height: 600
    color: "#000000"

    // グローバルセッティング
    Setting{
        id: _Setting

        // デバイスに関連する設定（初期設定）
        // 全般
        updateInterval: _Device.updateInterval          // 更新間隔（秒）
        inReplyCountMax: _Device.inReplyCountMax        // 返信元を追いかける回数
        updateCount: _Device.updateCount                // 取得する数
        toFocusTweetButton: _Device.toFocusTweetButton  // ツイートボタンにフォーカスを当てるか
        viewCountMax: _Device.viewCountMax              // 表示する件数の最大値

        //フォントサイズ
        fontPixelSizeTitle: _Device.fontPixelSizeTitle  // タイトル（ユーザー名）
        fontPixelSizeMessage: _Device.fontPixelSizeMessage  //本文（ツイート）
        fontPixelSizeInfomation: _Device.fontPixelSizeInfomation    //情報（時間など）
        fontPixelSizeInputBox: _Device.fontPixelSizeInputBox        // 入力ボックス
        fontPixelSizeRemainCount: _Device.fontPixelSizeRemainCount  // 入力文字残数
        fontPixelSizeTweetButton: _Device.fontPixelSizeTweetButton  // ツイートボタン

        fontPixelSizeContext: _Device.fontPixelSizeContext          // コンテキストメニュー
        fontPixelSizeButton: _Device.fontPixelSizeButton            // ボタン
        fontPixelSizeDlgMessageL: _Device.fontPixelSizeDlgMessageL  // ダイアログメッセージ
        fontPixelSizeDlgMessageM: _Device.fontPixelSizeDlgMessageM  // ダイアログメッセージ
        fontPixelSizeDlgMessageS: _Device.fontPixelSizeDlgMessageS  // ダイアログメッセージ

        //ロード完了
        Component.onCompleted: {
            Util.outputDebugString("onCompleted Setting");
            // 設定ロード
            _Setting.load();

            // デバイスごとの設定で上書きする
            TwitterAPI._consumerKey = _Device.consumerKey;
            TwitterAPI._consumerSecret = _Device.consumerSecret;

            // コンテンツエリアをロード
            _loaderContent.sourceComponent = _componentContent;
            _loaderMenu.sourceComponent = _componentMenu;
            _loaderDialog.sourceComponent = _componentDialog;

            //ウインドウサイズ調節
            _rootContainer.width = _Setting.windowWidth;
            _rootContainer.height = _Setting.windowHeight;
            // 取得するつぶやきの数
            TwitterAPI._count = _Setting.updateCount;

            Util.outputDebugString(">> Debug Infomation --------------------------");
            Util.outputDebugString("density=" + _Device.density);
            Util.outputDebugString("width=" + _Setting.windowWidth
                                   + ",height=" + _Setting.windowHeight);
            Util.outputDebugString("max=" + LayoutItem.maximumSize
                                   + ",min=" + LayoutItem.minimumSize
                                   + ",pref=" + LayoutItem.preferredSize);
            Util.outputDebugString(">> Debug Infomation --------------------------");
        }

        //閉じる時
        Component.onDestruction: {
            Util.outputDebugString("onDestruction Setting");

            //ウインドウサイズ調節
            _Setting.windowWidth = _rootContainer.width;
            _Setting.windowHeight = _rootContainer.height;
            // 設定保存
            _Setting.save();

            Util.outputDebugString("onDestruction Setting saved");
        }
    }


    //アイテムをクリックしてメニューだして何か処理させる時の情報を保存する
    Item{
        id: _selectItemInfo

        property string itemId: ""      //主にステータスID入れるのに使う
        property string screenName: ""  //screen nameの保存
        property string message: ""     //本文
        property bool isFavorite: false //お気に入り
        property bool isFollow: false   //フォローしているか

//        property variant item: null      //デリゲートそのもの

        property string listId: ""      //listの内容を表示する時のID
        property string listName: ""    //listの名前

        property string searchQuery: "" // 検索文字列

        property int mouse_x: -1         //マウスがクリックした場所
        property int mouse_y: -1         //マウスがクリックした場所

        //使ったらクリアする
        function clear(){
            itemId = "";
            screenName = "";
            message = "";
            isFavorite = false;
            isFollow = false;
//            mouse_x = -1; // ここで消すと消える時に位置が移動するのでダメ
//            mouse_y = -1;
//            item = null;
        }
    }


    // 0 -> 1 : コンテンツ -> Edit
    // 1 -> 2 : Edit -> ボタン
    // 2 -> 0 : ボタン -> コンテンツ
    function setNextFocus(current, increment){
        if(_Setting.toFocusTweetButton){
            // ツイートボタンもフォーカスする
            if(increment){
                current++;
            }else{
                current--;
            }
        }else{
            // フォーカスしない
            current = (current === 0) ? 1 : 0;
        }
        if(state === "NoneTweet"){
            // 展開してないときは開く
            openTweetContainer(true);
        }
        if(current > 2){
            current = 0;
        }else if(current < 0){
            current = 2;
        }

        // フォーカスセット
        switch(current){
        case 0:
            // 0 : コンテンツ
            _contentContainer.setFocusActiveListView();
            break;
        case 1:
            // 1 Edit
            _tweetContainer.setFocusTextEdit(true);
            break;
        case 2:
            // 2 : ボタン
            _tweetContainer.setFocusButton(true);
            break;
        default:
            break;
        }
    }

    // 入力へフォーカスを当てる
    function setFocusTextEdit(is){
        if(is){
            // ? -> 1 : ? -> Edit
            _tweetContainer.setFocusTextEdit(true);
        }else{
            // 1 -> ? : Edit -> ?
            _contentContainer.setFocusActiveListView();
        }
    }

    // ツイートコンテナを開閉する
    function openTweetContainer(is_open){
        if(is_open){
            if(state === ""){
            }else{
                state = "";
            }
        }else{
            if(state === "NoneTweet"){
            }else{
                state = "NoneTweet";
            }
        }
    }
    // ツイートコンテナが開いてるか
    function isOpenTweetContainer(){
        var ret = true;
        if(state === "NoneTweet"){
            ret = false;
        }
        return ret;
    }

    // 検索コンテナを開閉する
    function openSearchContainer(is_open){
        Util.outputDebugString("is=" + is_open);
        if(is_open){
            if(state === "ViewSearch"){
            }else{
                state = "ViewSearch";
            }
        }else{
            if(state === "NoneTweet"){
            }else{
                state = "NoneTweet";
            }
        }
    }
    // ツイートコンテナが開いてるか
    function isOpenSearchContainer(){
        var ret = false;
        if(state === "ViewSearch"){
            ret = true;
        }
        return ret;
    }



    //壁紙
    Image {
        id: _wallpaper
        anchors.fill: parent
        source: _Setting.wallpaperPath
        fillMode: Image.PreserveAspectCrop
        clip: true
        smooth: true
    }

    //アクションバーの管理
    ActionBar {
        id: _actionBar
        anchors.left: _rootContainer.left
        anchors.top: _rootContainer.top
        width: _rootContainer.width
        density: _Device.density

        //くるくる回す
//        loading: _contentContainer.loading

//        MouseArea {
//            anchors.fill: parent

//            onClicked: {
//                _toast.show("homhom");

////                _container.timelineSource = TwitterAPI.getTimelineURL();
////                _container.state = "";

////                var url = TwitterAPI.getTimelineURL();
////                Qt.openUrlExternally("http://relog.xii.jp/?param=a%3Db=");

////                console.log("action bar click : "+url);
////                console.log("homhom:" + TwitterAPI.getTimelineURL());
//            }
//        }
    }

    //つぶやきを入力するエリアの管理
    TweetContainer {
        id: _tweetContainer
        anchors.left: _rootContainer.left
        anchors.top: _actionBar.bottom
        anchors.right: _rootContainer.right
//        height: 50
        opacity: 1
        density: _Device.density
    }

    // 検索を入力するエリアの管理
    SearchContainer{
        id: _searchContainer
        anchors.left: _rootContainer.left
        anchors.top: _actionBar.bottom
        anchors.right: _rootContainer.right
        opacity: 0.0
        density: _Device.density
    }

    //実際の内容を表示する
    property alias _contentContainer: _loaderContent.item
    Loader{
        id: _loaderContent
        anchors.left: _rootContainer.left
        anchors.top: _tweetContainer.bottom
        anchors.right: _rootContainer.right
        anchors.bottom: _rootContainer.bottom

        onLoaded: {
            Util.outputDebugString("onLoaded Content");
            // 設定
            _contentContainer.updateSetting();
            // フォーカスを当てる
            setFocusTextEdit(false);
        }
    }
    Component{
        id: _componentContent
        Container {
            color: _Setting.backgroundColor
            opacity: _Setting.backgroundOpacity
            anchors.fill: parent

        }
    }


    // 前面に表示するダイアログのステーと管理
    property alias _dialogContainer: _loaderDialog.item
    Loader{
        id: _loaderDialog
        anchors.fill: parent
    }
    Component{
        id: _componentDialog
        DialogContainer {
//            id: _dialogContainer
            anchors.fill: parent
            density: _Device.density
        }
    }

    //全面に表示するメニューのステート管理
    property alias _menuContainer: _loaderMenu.item
    Loader{
        id: _loaderMenu
        anchors.fill: parent

        onLoaded: {
            Util.outputDebugString("onLoaded Menu");
            //ツイートエリアを隠す
            openTweetContainer(false);

            //認証情報の確認
            if(TwitterAPI.checkAuthInfo()){
                //更新
                _contentContainer.update();
            }else{
                //Auth
                _menuContainer.state = "Auth";
            }
        }
    }
    Component{
        id: _componentMenu
        MenuContainer {
    //        id: _menuContainer
            anchors.fill: parent
            density: _Device.density
        }
    }


    //Anroidのトースト的なもの
    Toast{
        id: _toast

        x: (_rootContainer.width / 2 - width / 2)
        y: (_rootContainer.height / 2 - height / 2)
        density: _Device.density
    }



    states: [
        State {
            name: "NoneTweet"

            PropertyChanges {
                target: _tweetContainer
                opacity: 0
                height: 0
            }
        },
        State {
            name: "ViewSearch"
            PropertyChanges {
                target: _searchContainer
                opacity: 1.0
            }
        }

    ]

    transitions: Transition {
        SequentialAnimation{
            ScriptAction {
                script: {
                    if(state === "ViewSearch"){
                        // search
                        _searchContainer.setFocusTextEdit(true);
                    }else if(state === ""){
                        // tweet
                        setFocusTextEdit(true);
//                        setFocusTextEdit(!(state === "NoneTweet"));
                    }else{
                    }
                }
            }

            NumberAnimation {
                easing.type: Easing.OutCubic
                targets: [_tweetContainer, _searchContainer]
                properties: "opacity, height"
                duration: 500
            }
        }

    }
}
